package prjtgl.metier.comptes.interactions_utilisateur;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;
import prjtgl.bdd.comptes.interactions_utilisateur.HSignalement;
import prjtgl.metier.comptes.Membre;
import prjtgl.metier.comptes.Utilisateur;

/**
 * Signalement
 * @author Lucie
 */
@Entity
@Table(name="signalement")
public class Signalement implements Serializable {

	/** Identifiant en BDD */
	private long id;
	/**
	 * Date a laquelle le signalement a ete fait
	 */
	private Date date;
	/**
	 * Raison du signalement
	 */
	private String description;
	/**
	 * Utilisateur ayant fait le signalement
	 */
	private Utilisateur signalant;
	/**
	 * Utilisateur ayant ete signale
	 */
	private Membre signale;
	
	
	/**
	 * Retourne l'ID BDD
	 * @return ID BDD
	 */
	@Id
	@Column(name="id")
	@GeneratedValue(strategy= GenerationType.IDENTITY)
	public long getId() {
		return id;
	}

	/**
	 * Mutateur de l'ID BDD
	 * @param id Nouvel ID BDD
	 */
	public void setId(long id) {
		this.id = id;
	}
	
	/**
	 * Retourne la date de creation du signalement
	 * @return Date de creation du signalement
	 */
	@Column(name="date_signalement")
	@Temporal(TemporalType.TIMESTAMP)
	public Date getDate() {
		return date;
	}

	/**
	 * Mutateur de la date de creation du signalement
	 * @param date Nouvelle date de creation du signalement
	 */
	public void setDate(Date date) {
		this.date = date;
	}

	/**
	 * Retourne le motif de signalement
	 * @return Motif de signalement
	 */
	@Column(name="description")
	public String getDescription() {
		return description;
	}

	/**
	 * Mutateur du motif de signalement
	 * @param description Nouveau motif de signalement
	 */
	public void setDescription(String description) {
		this.description = description;
	}

	/**
	 * Retourne l'utilisateur signalant
	 * @return Utilisateur signalant
	 */
	@ManyToOne(cascade= CascadeType.ALL, fetch= FetchType.LAZY)
	@JoinColumn(name="id_signalant")
	public Utilisateur getSignalant() {
		return signalant;
	}

	/**
	 * Mutateur de l'utilisateur signalant
	 * @param signalant Nouvel utilisateur signalant
	 */
	public void setSignalant(Utilisateur signalant) {
		this.signalant = signalant;
	}

	/**
	 * Retourne le membre signale
	 * @return Membre signale
	 */
	@ManyToOne(cascade= CascadeType.ALL, fetch= FetchType.LAZY)
	@JoinColumn(name="id_signale")
	public Membre getSignale() {
		return signale;
	}

	/**
	 * Mutateur du membre signale
	 * @param signale Nouveau membre signale
	 */
	public void setSignale(Membre signale) {
		this.signale = signale;
	}
        
        public void creerSignalement(){
            HSignalement hs = new HSignalement();
            hs.enregistrer(this);
        }
}
